package ProducerAndConsumer;

/**
 * 用volatile实现生产者消费者
 */
public class ProducerAndConsumer03 {
    public static void main(String[] args) {
        Task03 task = new Task03();

        new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                task.oddNumber();
            }
        }).start();

        new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                task.evenNumber();
            }
        }).start();
    }
}

class Task03 {

    /**
     * 执行的标志位
     */
    private volatile int flag = 0;

    /**
     * 打印的数字
     */
    private int num = 1;

    /**
     * 打印奇数
     */
    public void oddNumber() {
        // 等待条件
        while (flag != 0) {

        }

        // 业务
        System.out.println(Thread.currentThread().getName() + " -> " + num++);

        // 唤醒
        flag = 1;
    }

    /**
     * 打印偶数
     */
    public void evenNumber() {
        // 等待条件
        while (flag != 1) {

        }

        // 业务
        System.out.println(Thread.currentThread().getName() + " -> " + num++);

        // 唤醒
        flag = 0;
    }
}
